docs: run Feast offline-to-online pipeline with Spark Operator - #310
Merged
Conversation
Deploying alauda-ai with
|
| Latest commit: |
a3c1408
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://1b9bb617.alauda-ai.pages.dev |
| Branch Preview URL: | https://agent-feast-offline-online-n.alauda-ai.pages.dev |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
SparkApplicationfor every Spark batch workloaddocs/en/train/guides/assets/feast-offline-to-online-inference/%%bashcommand cells and directkubectl applypipelines to create and submit Kubernetes resources; remove the notebook's Pythonkubectlwrapper and embedded source/YAML stringsSparkApplicationdriverSparkSession.builder.config()API before context creation; use Secret-backed AWS environment variables through S3A's credential chain instead of private Py4J APIs or credentials in Spark configurationkube-public/global-infoand require an approved Spark+Feast runtime instead of embedding an internal registry hostnameJoband localFileSourceto the same SparkApplication + S3 + PostgreSQL registry + Redis architecture, reusing the notebook'sbatch.pyandserver.pyassets to avoid source driftWhy
For production-sized offline feature history, S3-compatible object storage plus operator-managed Spark is a better scaling boundary than using PostgreSQL as the feature-history store. PostgreSQL remains a good durable registry backend, while Redis remains the low-latency online store. Feast's Spark offline store is a contributed integration without full test coverage, so the notebook calls out the need to qualify it or use a fully supported warehouse for stricter production requirements.
Keeping source files and manifests under
assets/makes the example inspectable, reusable from e2e, and easier to customize. The notebook remains the walkthrough and uses ordinary shell command blocks for resource submission.Validation
yarn lint(0 errors and 0 warnings)python3 -m py_compilefor the sharedbatch.pyandserver.pyassetsbash -n e2e/lib.sh e2e/cases/c16_feast_offline_online.shkubectlwrapper, embeddedbatch_source/server_source, C16 path, internal registry hostname,_jsc, or_jvmgit diff --checkdemo-x86: exits with skip code 77 whensparkapplications.sparkoperator.k8s.iois absentdemo-x86validation inmlops-demo-e2e: PostgreSQL registry, SeaweedFS S3 upload, 240-row historical retrieval, Redis materialization, and online reads for two entitiesLive installation status
The uploaded OLM package is expected on the
x86cluster, but its API endpoint timed out on repeated direct and proxy attempts during this update. The reachabledemo-x86cluster does not expose the uploaded Spark package inPackageManifestand already contains a different non-OLM Apache Spark operator using thespark.apache.orgAPI group, so no replacement or conflicting second global controller was installed there. The operator installation and full C16 execution remain to be rerun when thex86API is reachable.